package com.baijiayun.live.ui.setting;

import com.baijiayun.live.ui.base.BasePresenter;
import com.baijiayun.live.ui.base.BaseView;
import com.baijiayun.livecore.context.LPConstants;
import com.baijiayun.livecore.context.LPError;
import com.baijiayun.livecore.context.LPSDKContext;
import com.baijiayun.livecore.context.LiveRoom;
import com.baijiayun.livecore.models.LPBleDevice;
import com.baijiayun.livecore.models.LPMirrorModeModel;
import com.baijiayun.livecore.models.launch.LPEnterRoomNative;
import com.baijiayun.livecore.ppt.PPTView;

import java.util.List;
import java.util.Set;

import android_serialport_api.DeviceInfo;

public interface SettingContract {
    interface View extends BaseView<Presenter>{

        void showCamera(boolean videoAttached);

        void showCameraSwitchStatus(boolean whetherShow);

        void setCameraAboutEnable(boolean isEnable);

        void setWhichCameraEnable(boolean isEnable);

        void showAudio(boolean isAudioBackOpen);

        void showVisitorFail();

        void setRemarkSettingEnable(boolean isEnable);

        void showForbidAllAudio(boolean forbidAllAudioStatus);

        void showForbidRaiseHand(boolean forbidRaiseHandStatus);

        void setForbiddenEnable(boolean b);

        void showForbidden(boolean isForbid);

        void showSwitchForbid();

        void setForbidRaiseHandEnable(boolean isEnable);

        void setMicEnable(boolean isEnable);

        void setCameraEnable(boolean isEnable);

        void setForbidAllAudioEnable(boolean isEnable);

        void setPPTShowTypeEnable(boolean isEnable);

        void setPPTViewTypeEnable(boolean isEnable);

        void setDefinitionEnable(boolean isEnable);

        void setUpLinkEnable(boolean isEnable);

        void setDownLinkEnable(boolean isEnable);

        void setAudioEnable(boolean isEnable);

        void setChangePPTEnable(boolean isEnable);

        void showStudentsHandsUp(boolean b);

        void hidePPTMenu();

        void hidePPTChangeMenu();

        void showUpLinkType(boolean isEnable);

        void showDownLinkType(boolean isEnable);

        void showPPTViewType(boolean isAnim);

        void showPPTViewNoPPT();

        void showMic(boolean audioAttached);

        void showChangePPTEnable(boolean studentSwitchPPTState);

        void showPPTType(boolean isFullScreen);

        void showWhichCamera(boolean cameraOrientation);

        void hidePPTShownType();

        void onMirrorModeChange(LPMirrorModeModel lpMirrorModeModel, Set<String> horizontalMirrorModeSet, Set<String> verticalMirrorModeSet);

        void onChangePPTForbidFailed();

        void showSwitchPPTFail();

        void showSwitchLinkTypeError();

    }

    interface Presenter extends BasePresenter{

        String getRoomId();

        List<LPBleDevice> getRecentBleDevices();

        DeviceInfo getConnectedDevice();

        void showBleDialog();

        void changeCamera();

        boolean isReplaceCamera();

        void switchAudio();

        void changeMic();

        void setRemarksEnable(boolean isEnable);

        void switchForbidAllAudio(boolean isForbid);

        boolean switchForbidStatus();

        void switchForbidRaiseHand();

        void setBeautyLevel(float beautyLevel);

        float getBeautyLevel();

        void setWhitenessLevel(float whitenessLevel);

        float getWhitenessLevel();

        int getWebrtcType();

        boolean isVideoAttached();

        boolean isTeacherOrAssistant();

        boolean isUseWebRTC();

        void setPPTFullScreen();

        void setPPTOverspread();

        boolean isGroup();

        void switchChangePPTEnable(int checkedPosition);

        void switchAllHorizonMirrorMode(boolean on);

        void switchAllVerticalMirrorMode(boolean on);

        void switchCamera(boolean b);

        boolean isClassStart();

        boolean getCameraOrientation();

        boolean isAudioAttached();

        int getSpeakApplyStatus();

        LPConstants.LPLinkType getLinkType();

        boolean getForbidRaiseHandStatus();

        boolean getForbidAllAudioStatus();

        boolean getForbidStatus(LPConstants.LPForbidChatType typeGroup);

        PPTView getPPTView();

        boolean getStudentSwitchPPTState();
        
        LPEnterRoomNative.LPPartnerConfig getPartnerConfig();

        Set<String> getHorizontalMirrorModeSet();

        Set<String> getVerticalMirrorModeSet();

        LPConstants.LPResolutionType getVideoDefinition();

        LPError setCaptureVideoDefinition(LPConstants.LPResolutionType resolutionType);

        LPConstants.TemplateType getTemplateType();

        void setPPTViewAnim();

        void setPPTViewStatic();

        LPConstants.LPRoomType getRoomType();

        int getCDNCount();

        void setUpCDNLink(int order);

        void setUpLinkTCP();

        void setUpLinkUDP();

        void setDownLinkTCP();

        void setDownLinkUDP();

        void setDownCDNLink(int order);
    }
}
